解决xlwings多个pid占用多个excel.exe进程,导致打开生成的Excel一片空白 | 您所在的位置:网站首页 › JAVA 操作 正在打开的Excel › 解决xlwings多个pid占用多个excel.exe进程,导致打开生成的Excel一片空白 |
近来在搞根据yaml格式的文件,由yaml中输入的内容转换为Excel文件,使用xlwings模块,但是发现最后虽然使用app.kill(),但是还是有多个excel.exe进程占用,最初没有发现原因,使用以下方法解决: ...... # 保存文件并关闭 self.wb.save("xxx.xlsx") self.wb.close() self.app.kill() # 手动终止excel进程 os.system("taskkill /f /im EXCEL.EXE")但是这样会有一个问题,它会终止正在运行的所有excel进程,如果正在编辑的excel没有保存,就会丢失内容。 解决办法:后面通过打印app.pid发现多出来不能通过app.kill()终止的进程是由于读取yaml时,我单独创建了一个函数,后面在写入excel的函数中调用,会执行类下的__init__方法,这样就新增了一个app进程。 解决办法就是删除读取yaml的函数,直接写在写入excel的函数中,之后正常通过app.kill()结束就可以了。 如下,将下面 class A: ...... def read_yaml(self): """ 读取yaml文件 """ with open("xxx.yaml", "r") as f: data = f.read() return yaml.load(data, Loader=yaml.Loader) def write_xls(self): """ 写入excel """ conent = A().read_yaml() ...改为: class A: ...... def write_xls(self): """ 写入excel """ with open("xxx.yaml", "r") as f: data = f.read() conent = yaml.load(data, Loader=yaml.Loader) ...... ...... # 保存文件并关闭 self.wb.save("xxx.xlsx") self.wb.close() self.app.kill()其实解决也简单,只是找到是哪里的问题有点麻烦。。。 |
CopyRight 2018-2019 实验室设备网 版权所有 |